perm filename UCODEO.LIS[S1,ALS] blob
sn#444128 filedate 1979-05-29 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00003 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 List of changes to Ucode. Last update 14-may-79 ARR
C00017 00003 Current definition of Ucode. Last update 14-may-79 ARR
C00027 ENDMK
C⊗;
List of changes to Ucode. Last update 14-may-79 ARR
------------------------
copied May 29th last change May 17th by ARR
Updated 14-may-79 ARR to reflect meeting of 11-may-79
Updated 9-may-79 ARR consistency with page 3 of UCODE.LIS
Updated 4-may-79 ARR fixing mistakes incurred in while typing it.
------------------------
∂02-May-79 1256 ARR Report on Ucode meeting, 28-apr-79
To: "#SOPA.LOG[DOC,S1]"
CC: ARR
Brief report of the meetings held on 27-apr-79 and 28-apr-79 to make changes to
the Ucode Language.
This report written by ARR. All the information will be crosschecked before the
revised documents come out.
(A) CONCEPTUAL DESCRIPTION:
----------------------
1. The data type implies an inherent, operation-oriented length (e.g.,
single and double word arithmetic) The length parameter describes
the storage length only. It was suppressed from non-load/store
operations, and added to the load/store operations that didn't
have it.
2. Tools were added for procedures as parameters.
3. Tools were added for importing/exporting procedures and variables.
4. Tools were defined for operations on sets of any size.
5. An equivalent of MST was added for sequential blocks of code, to soften
the problem caused by the restriction that stack should be empty
after a jump.
6. Type conversion was generalized.
7. LOC will give SOURCE statement counts, instead of Ucode counts.
8. Instructions were added for the Exclusive OR operation.
9. Other changes, mainly cosmetic.
10. LCA does anything that LDC does.
11. XJP was reconfigured.
12. Tools were added for GOTO to other procedures. (11-may-79)
13. An SDEF (equivalent of MDEF for the stack) was added. (11-may-79)
(C) DETAILED DESCRIPTION:
--------------------
1. NEW INSTRUCTIONS:
----------------
S ADJ dt off lenr Adjust the size of set on top T<-T
S BGNB Mark the stack for a Block of code ---
S ENDB Cancel the last stack mark ---
S CVT dt dt len Convert to type dt T<-T
S CVT2 dt dt len Convert to type dt the second element
from top of the stack. T-1<-T-1
S DSP len Dispose from the heap. Address in T. Pop
T EXPP blkn name Export a procedure entry point ---
T EXPV mt blkn off len Export a variable address ---
C ICUP dt pop push Indirect call to a user procedure ---
T IMPP blkn name Import a procedure entry point ---
T IMPV mt blkn off len Import a variable address ---
M INST dt off len Indirect Nondestructive Store swap;
(T)<-T-1;pop
M LDP level blkn name Load the information about a procedure
entry point T<-@name
? PLEX level Pop the stack to a lower lexical level ---
S SDEF dtlist Define the data types that go into the stack.
S TYP2 dt Change the stack flag of second from
top of stack to type dt (no bit change) T-1<-T-1
S XOR dt Exclusive OR T<-T-1 or T
2. SUPPRESSED INSTRUCTIONS:
-----------------------
ORD, were replaced by TYP, TYO
CHR, FLO, FLT, TRC were replaced by CVT, CVO
3. ADD PARAMETERS:
--------------
AND, CHKN, DIF, INN, INT, IOR, NOT, UNI: take a dt, which has one only valid value.
IXA dt len
LCA dt len value
LDC dt len value
MUS dt
ODD dt
RND dt dt
SGS dt
XJP dt c-label else-label lb ub
4. SUPPRESS PARAMETERS:
-------------------
EQU, GEQ, GRT, IEQU, IGEQ, IGRT, ILEQ, ILES, INEQ, LEQ, LES, NEQ: No len. dt only.
RND dt dt (result, operand)
5. OTHER CHANGES:
-------------
What was Became
-------- ------
name BGN BGN name
MOV len IMOV dt
OPTN dt off OPTN name integer
IND dt off len ILOD dt off len
STO dt off len ISTR dt off len
6. DATA TYPES:
----------
It was agreed to have, besides the current ones, distinct data types for:
+ single and double word integers
+ single and double word nonnegative integers
+ single and double word reals
+ Entry point addresses.
In sopa, we will use the next letters:
A Address
B Boolean
C Character
E Procedure passed as parameter
I Double word integer
J Single word integer
K Double word non-negative integer
L Single word non-negative integer
M record
N Nil pointer
P Procedure
R Single-word real
S Set
T string
X Double-word real
Current definition of Ucode. Last update 14-may-79 ARR
---------------------------
copied May 29th last change May 17th by ARR
Updated 14-may-79 ARR to reflect meeting of 11-may-79
Updated 12-may-79 RB to suppress proposal for type E in memory
Updated 9-may-79 ARR crosscheck with PN,ALS,RB,FC, and document (mail) from RLS.
---------------------------
SOPA DATA TYPES: (s: standard ucode data types)
---------------
s A Address
s B Boolean
s C Character
s E Procedure passed as parameter
I Double word integer
J Single word integer
K Double word non-negative integer
L Single word non-negative integer
s M record, array
s N Nil pointer
s P Procedure
Q Double-word real
R Single-word real
s S Set
SYMBOLOGY:
---------
+ = added
- = deleted
p = parameters changed
n = name changed
{} = parameter for SOPA only
[] = allowable data types for SOPA
* = open for discussion (requires RLS approval of SDEF
UCODE INSTRUCTIONS:
------------------
ABS <dtype> [I,J,K,L,Q,R]
ADD <dtype> [I,J,K,L,Q,R]
+ ADJ <dtype> <offset> <resultig length> (adjust size of a set)
p AND <dtype> [B]
p BGN <name>
+ BGNB (begin block)
CHKF
CHKH <opnd dtype> <highbound> [A,C,I,J,K,L,S]
CHKL <opnd dtype> <lowbound> [A,C,I,J,K,L,S]
p CHKN <opnd dtype> [A]
CHKT
- (CHR)
<label> CLAB <length>
COMM <comment>
CSP <res dtype> <proc name> <pop> <push> [A,B,C,I,J,K,L,*M,P,Q,R,S]
CUP <res dtype> <block no> <proc name> <pop> <push> {<flt pt>}
[A,B,C,I,J,K,L,*M,P,Q,R,S]
+ CVT <res dtype> <opnd dtype> <res length> (convert top of stack)
[I,J,K,L] ↔ [X,R] (FLT,TRC)
[I] ↔ [J]
[K] ↔ [L]
[X] ↔ [R]
[I,J,K,L] → [C] (CHR)
+ CVT2 <res dtype> <opnd dtype> <res length> (convert second on stack )
[I,J,K,L] ↔ [X,R] (FLT,TRC)
[I] ↔ [J]
[K] ↔ [L]
[X] ↔ [R]
[I,J,K,L] → [C] (CHR)
DEAD <mem type> <block no> <offset> <length>
DEC <dtype> <value> [A,B,C,I,J,K,L,S]
DEF <mem type> <length>
p DIF <dtype> [S]
DIV <dtype> [I,J,K,L,Q,R]
DMD <dtype> [I,J,K,L]
DOA <mem type> <block no> <offset> <length>
+ DSP <length> (dispose)
DUP <dtype> [A,B,C,I,J,K,L,*M,Q,R,S]
END <name>
+ ENDB (end block)
<name> ENT <res dtype> <level> <block no> <pop> <push> { <proc name> <gen> <fltpt> }
[A,B,C,I,J,K,L,*M,P,Q,R,S]
p EQU <opnd dtype> [A,B,C,I,J,K,L,*M,Q,R,S]
+ EXPP <block no> <name> (export procedure)
+ EXPV <mem type> <block no> <offset> <length> (export variable)
[A,B,C,I,J,K,L,Q,R,S]
FJP <label>
- (FLO)
- (FLT)
p GEQ <opnd dtype> [A,B,C,I,J,K,L,*M,Q,R,S]
p GRT <opnd dtype> [A,B,C,I,J,K,L,*M,Q,R]
+ ICUP <res dtype> <pop> <push> (call to proc passed as param)
p IEQU <opnd dtype> [A,B,C,I,J,K,L,M,Q,R,S]
p IGEQ <opnd dtype> [A,B,C,I,J,K,L,M,Q,R,S]
p IGRT <opnd dtype> [A,B,C,I,J,K,L,M,Q,R]
p ILEQ <opnd dtype> [A,B,C,I,J,K,L,M,Q,R,S]
p ILES <opnd dtype> [A,B,C,I,J,K,L,M,Q,R]
n ILOD <dtype> <offset> <length> (used to be IND)
[A,B,C,I,J,K,L,*M,Q,R,S]
n IMOV <dtype> (used to be MOV) [A,B,C,I,J,K,L,M,Q,R,S]
+ IMPP <block no> <name> (import procedure)
+ IMPV <mem type> <block no> <offset> <length> (import variable)
[A,B,C,I,J,K,L,M,X,R,S]
INC <dtype> <value> [A,B,C,I,J,K,L,S]
p INEQ <opnd dtype> [A,B,C,I,J,K,L,M,Q,R,S]
p INN <opnd dtype> [I,J,K,L]
INST <dtype> <offset> <length> (indirect non-destructive store)
[A,B,C,I,J,K,L,*M,Q,R,S]
p INT <dtype> [S]
p IOR <dtype> [B]
n ISTR <dtype> <offset> <length> (used to be STO)
[A,B,C,I,J,K,L,*M,Q,R,S]
p IXA <opnd dtype> <unit size> [I,J,K,L]
<label> LAB <branch count>
p LCA <opnd dtype> <value> [M,S]
LDA <mem type> <block no> <offset> <length>
p LDC <opnd dtype> <value>
[B,C,I,J,K,L,*M,N,Q,R,S]
+ LDP <level> <block no> <name>
p LEQ <opnd dtype> [A,B,C,I,J,K,L,*M,Q,R,S]
p LES <opnd dtype> [A,B,C,I,J,K,L,*M,Q,R]
LEX <level> <block no>
LIVE <mem type> <block no> <offset> <length>
LOC <statement number>
LOD <dtype> <mem type> <block no> <offset> <length>
[A,B,C,E,I,J,K,L,*M,Q,R,S]
MDEF <memtype> <length> <min> <max> <dtype list>
MOD <dtype> [I,J,K,L]
MPY <dtype> [I,J,K,L,Q,R]
MST <level> {<params size> <regparm size>}
p MUS <opnd dtype> [I,J,K,L]
NEG <dtype> [I,J,K,L,Q,R]
p NEQ <opnd dtype> [A,B,C,I,J,K,L,*M,Q,R,S]
NEW <length>
p NOT <dtype> [B]
NSTR <dtype> <mem type> <block no> <offset> <length>
[A,B,C,I,J,K,L,*M,Q,R,S]
p ODD <opnd dtype> [I,J,K,L]
- (ORD)
p OPTN <name> <integer>
PAR <dtype> <mem type> <block no> <offset> <length>
[A,B,C,E,I,J,K,L,*M,Q,R,S]
PLOD <dtype> <mem type> <block no> <offset> <length>
[A,B,C,I,J,K,L,*M,Q,R,S]
+ PLEX <level> (Pop to a lower lexical level)
PSTR <dtype> <mem type> <block no> <offset> <length>
[A,B,C,E,I,J,K,L,*M,Q,R,S]
RET
p RND <res dtype> <opnd dtype>
[I,J,K,L] [R,X]
+ SDEF <dtype list> (Define the data types allowed into the stack)
p SGS <opnd dtype> [I,J,K,L]
SQR <dtype> [I,J,K,L,Q,R]
STP <name>
STR <dtype> <mem type> <block no> <offset> <length>
[A,B,C,I,J,K,L,*M,Q,R,S]
SUB <dtype> [I,J,K,L,Q,R]
SWP <top dtype> <scnd dtype>
[A,B,C,I,J,K,L,*M,Q,R,S] [A,B,C,I,J,K,L,*M,Q,R,S]
<name> SYM <mem type> <block no> <offset> <length>
TJP <label>
- (TRC)
- (UNK 0 0 TON <trace>)
+ TYP <res dtype> <opnd dtype>
[I] ↔ [K]
[J] ↔ [L]
[B,C] → [J,L] (ORD)
[I,J,K,L] ↔ [S]
+ TYP2 <res dtype> <opnd dtype> (change type of second on stack)
[I] ↔ [K]
[J] ↔ [L]
[B,C] → [J,L] (ORD)
[I,J,K,L] ↔ [S]
UJP <label>
p UNI <dtype> [S]
UNK <pop> <push> comment field
p XJP <opnd dtype> <case label> <else label> <lowbound> <highbound>
+ XOR <dtype> [B]